package br.com.orion.sga.model.entities;

// Generated Jul 19, 2014 6:45:05 PM by Hibernate Tools 3.4.0.CR1

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;

import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.CascadeType;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * MovimentacaoCaixa generated by hbm2java
 */
@Entity
@Table(name = "movimentacao_caixa", catalog = "sga")
public class MovimentacaoCaixa implements java.io.Serializable {

	private Long id;
	private FormaPagamento formaPagamento;
	private Funcionario funcionario;
	private Caixa caixa;
	private Aluno aluno;
	private TipoMovimentacao tipoMovimentacao;
	private String descricao;
	private Date data;
	private float valor;
	private Float troco;
	private Float desconto;
	private Set<Cheque> cheques = new HashSet<Cheque>(0);
	private Set<PagamentoCartao> pagamentoCartaos = new HashSet<PagamentoCartao>(
			0);

	public MovimentacaoCaixa() {
	}

	public MovimentacaoCaixa(FormaPagamento formaPagamento,
			Funcionario funcionario, Caixa caixa, Aluno aluno,
			TipoMovimentacao tipoMovimentacao, String descricao, Date data,
			float valor) {
		this.formaPagamento = formaPagamento;
		this.funcionario = funcionario;
		this.caixa = caixa;
		this.aluno = aluno;
		this.tipoMovimentacao = tipoMovimentacao;
		this.descricao = descricao;
		this.data = data;
		this.valor = valor;
	}

	public MovimentacaoCaixa(FormaPagamento formaPagamento,
			Funcionario funcionario, Caixa caixa, Aluno aluno,
			TipoMovimentacao tipoMovimentacao, String descricao, Date data,
			float valor, Float troco, Float desconto, Set<Cheque> cheques,
			Set<PagamentoCartao> pagamentoCartaos) {
		this.formaPagamento = formaPagamento;
		this.funcionario = funcionario;
		this.caixa = caixa;
		this.aluno = aluno;
		this.tipoMovimentacao = tipoMovimentacao;
		this.descricao = descricao;
		this.data = data;
		this.valor = valor;
		this.troco = troco;
		this.desconto = desconto;
		this.cheques = cheques;
		this.pagamentoCartaos = pagamentoCartaos;
	}

	@Id
	@Column(name = "id", unique = true, nullable = false)
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public Long getId() {
		return this.id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_forma_pagamento", nullable = false)
	public FormaPagamento getFormaPagamento() {
		return this.formaPagamento;
	}

	public void setFormaPagamento(FormaPagamento formaPagamento) {
		this.formaPagamento = formaPagamento;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_funcionario", nullable = false)
	public Funcionario getFuncionario() {
		return this.funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_caixa", nullable = false)
	public Caixa getCaixa() {
		return this.caixa;
	}

	public void setCaixa(Caixa caixa) {
		this.caixa = caixa;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_aluno", nullable = false)
	public Aluno getAluno() {
		return this.aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_tipo_movimentacao", nullable = false)
	public TipoMovimentacao getTipoMovimentacao() {
		return this.tipoMovimentacao;
	}

	public void setTipoMovimentacao(TipoMovimentacao tipoMovimentacao) {
		this.tipoMovimentacao = tipoMovimentacao;
	}

	@Column(name = "descricao", nullable = false, length = 100)
	public String getDescricao() {
		return this.descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "data", nullable = false, length = 0)
	public Date getData() {
		return this.data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	@Column(name = "valor", nullable = false, precision = 12, scale = 0)
	public float getValor() {
		return this.valor;
	}

	public void setValor(float valor) {
		this.valor = valor;
	}

	@Column(name = "troco", precision = 12, scale = 0)
	public Float getTroco() {
		return this.troco;
	}

	public void setTroco(Float troco) {
		this.troco = troco;
	}

	@Column(name = "desconto", precision = 12, scale = 0)
	public Float getDesconto() {
		return this.desconto;
	}

	public void setDesconto(Float desconto) {
		this.desconto = desconto;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "movimentacaoCaixa", cascade=CascadeType.ALL)
	public Set<Cheque> getCheques() {
		return this.cheques;
	}

	public void setCheques(Set<Cheque> cheques) {
		this.cheques = cheques;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "movimentacaoCaixa", cascade=CascadeType.ALL)
	public Set<PagamentoCartao> getPagamentoCartaos() {
		return this.pagamentoCartaos;
	}

	public void setPagamentoCartaos(Set<PagamentoCartao> pagamentoCartaos) {
		this.pagamentoCartaos = pagamentoCartaos;
	}

}
